package src.week9.SHIYAN6.Demo2;

/**
 * @Author： 20192315裴湘瑞
 * @Date: 2020/11/5 16:42
 * @Version: 1.0
 * @Target：实现节点插入、删除、输出操作
 * @Requirement：
 * 继续你上一个程序， 扩展它的功能，每做完一个新功能，或者写了超过10行新代码，就签入代码，提交到源代码服务器；
 *
 * 	从磁盘读取一个文件， 这个文件有两个数字。
 * 	从文件中读入数字1，  插入到链表第 5 位，并打印所有数字，和元素的总数。 保留这个链表，继续下面的操作。
 * 	从文件中读入数字2， 插入到链表第 0 位，并打印所有数字，和元素的总数。 保留这个链表，并继续下面的操作。
 * 	从链表中删除刚才的数字1.  并打印所有数字和元素的总数。
 *
 * 签入所有代码。
 */

public class ShiYan6_2_Link
{
    ShiYan6_2_Node head = null;
    int xs20192318 = 0;

    public void AddNode(int d)
    {
        ShiYan6_2_Node node = new ShiYan6_2_Node(d);
        if (head == null) {
            head = node;
            xs20192318++;
            return;
        }

        ShiYan6_2_Node temp = head;

        while (temp.next != null)
        {
            temp = temp.next;
        }
        temp.next = node;
        xs20192318++;
    }

    public void InsertNode(int index1,int d)
    {
        if (index1 > xs20192318||index1 < 0)
        {
            System.out.println("超出范围！");
            return;
        }

        int index = index1 - 1;
        ShiYan6_2_Node node = new ShiYan6_2_Node(d);

        ShiYan6_2_Node temp = head;
        int i;
        for(i = 0;i < index-1;i++)
        {
            temp = temp.next;
        }
        node.next = temp.next;
        temp.next = node;
        xs20192318++;
    }

    public boolean DeleteNode(int index)
    {
        if (index < 1 || index > Length())
        {
            System.out.println("超出范围！");
            return false;
        }
        if (index == 1)
        {
            head = head.next;
            xs20192318--;
            return true;
        }
        int i = 1;
        ShiYan6_2_Node preNode = head;
        ShiYan6_2_Node curNode = preNode.next;
        while (curNode != null)
        {
            if (i == index-1)
            {
                preNode.next = curNode.next;
                xs20192318--;
                return true;
            }
            preNode = curNode;
            curNode = curNode.next;
            i++;
        }
        return false;
    }

    public int Length()
    {
        return xs20192318;
    }

    public boolean DeleteNode1(ShiYan6_2_Node n)
    {
        if (n == null || n.next == null)
        {
            return false;
        }
        int tmp = n.data;
        n.data = n.next.data;
        n.next.data = tmp;
        n.next = n.next.next;
        System.out.println("删除成功！");
        return true;
    }

    public void Print()
    {
        ShiYan6_2_Node temp1 = head;
        while (temp1 != null)
        {
            System.out.print(temp1.data+" ");
            temp1 = temp1.next;
        }
        System.out.println();
    }

    public void Sort()
    {
        ShiYan6_2_Node newHead = head;
        int temp;
        ShiYan6_2_Node node = head;
        while (node != null) {
            ShiYan6_2_Node reNode = node.next;
            while (reNode != null) {
                if (reNode.data < node.data) {
                    temp = reNode.data;
                    reNode.data = node.data;
                    node.data = temp;
                }
                reNode = reNode.next;
            }
            node = node.next;
        }
    }
}
